package org.example;

public class Customer {
     private String customerId;
    private String name;
    private List<Order> orders;

    public Customer(String customerId, String name) {
        this.customerId = customerId;
        this.name = name;
        this.orders = new ArrayList<>();
    }

    public void addOrder(Order order) {
        orders.add(order);
    }
}

class Order {
    private String orderId;
    private Customer customer;
    private List<OrderDetail> orderDetails;
    private Payment payment;

    public Order(String orderId, Customer customer) {
        this.orderId = orderId;
        this.customer = customer;
        this.orderDetails = new ArrayList<>();
    }

    public void addOrderDetail(OrderDetail orderDetail) {
        orderDetails.add(orderDetail);
    }

    public void setPayment(Payment payment) {
        this.payment = payment;
    }
}

class OrderDetail {
    private Product product;
    private int quantity;

    public OrderDetail(Product product, int quantity) {
        this.product = product;
        this.quantity = quantity;
    }
}

class Product {
    private String productId;
    private String name;

    public Product(String productId, String name) {
        this.productId = productId;
        this.name = name;
    }
}

class Payment {
    private String paymentId;

    public Payment(String paymentId) {
        this.paymentId = paymentId;
    }
}
class Credit extends Payment {
    private String cardNumber;

    public Credit(String paymentId, String cardNumber) {
        super(paymentId);
        this.cardNumber = cardNumber;
    }
}

class Cash extends Payment {
    private double amount;

    public Cash(String paymentId, double amount) {
        super(paymentId);
        this.amount = amount;
    }
}

class WireTransfer extends Payment {
    private String bankAccount;

    public WireTransfer(String paymentId, String bankAccount) {
        super(paymentId);
        this.bankAccount = bankAccount;
    }
}

class AliPay extends Payment {
    private String account;

    public AliPay(String paymentId, String account) {
        super(paymentId);
        this.account = account;
    }
}

class WeixinPay extends Payment {
    private String account;

    public WeixinPay(String paymentId, String account) {
        super(paymentId);
        this.account = account;
    }

}
